//
// Created by sjjmw on 3/24/2022.
//
#include "iostream"
#include "vector"
#include "list"
#include "algorithm"
#include "string"
#include "unordered_map"
#include "cmath"
#include<iomanip>
#include "string"
#include "map"
#include "list"

//先走到一个加油站，然后加多少取决于后面有没有更便宜的加油站，
//如果有
struct Jyz{
    float di;
    float pi;
};
bool cmp(Jyz&j1,Jyz&j2){
    if(j1.di<j2.di){
        return true;
    }
    return false;
}
struct Sol{
    std::vector<Jyz> jyzs;
//    给定两个城市之间的距离D1、汽车油箱的容量C（以升为单位）、
//    每升汽油能行驶的距离D2、出发点每升汽油价格P
//    和沿途油站数N（N可以为零）
    void handle(
            float d1,float c,float d2,float p,
            int n
            ){
        jyzs.push_back({0,p});
        for(int i=0;i<n;i++){
            Jyz jyz;
            std::cin>>jyz.di>>jyz.pi;
            jyzs.push_back(jyz);
        }
        std::sort(jyzs.begin(),jyzs.end(), cmp);
        float walked=0;
        float cur_qiyou=0.0000005;
//        int jyz_i=0;
        float all_cost=0;
        for(int jyz_i=0;jyz_i<jyzs.size();jyz_i++){
            auto&jyz=jyzs[jyz_i];
            //每次先看到一个加油站
            float dis_2_jyz=jyz.di-walked;
            if(cur_qiyou*d2>=dis_2_jyz){
                //可以走到加油站

                //走到加油站
                walked+=dis_2_jyz;
                //消耗汽油
                cur_qiyou-=dis_2_jyz/d2;
                //开始加油
                {
                    //如果已经是最后一个加油站,加能到终点的油
                    //策略，如果后面有更便宜的,并且加满可以到达，那么加到刚好到下一站
                    //如果没有，加满
                    int cheaper=-1;
                    for(int i=jyz_i+1;i<jyzs.size();i++){
                        if(jyzs[i].pi<jyz.pi&&
                            jyzs[i].di-walked<=c*d2
                        ){
                            cheaper=i;
                        }
                    }
                    if(cheaper==-1){
                        //最后一个加油站
                        if(jyz_i==jyzs.size()-1){
                            float to_final_dis=d1-walked;
                            if(c*d1<to_final_dis){
                                //到不了终点.
                                goto no;
                            }else{
                                float add=to_final_dis/d2;
                                cur_qiyou+=add;
                                all_cost+=add*jyz.pi;
                            }
                        }else{
                            //没有更便宜的
                            float add = c - cur_qiyou;
                            cur_qiyou = c;
                            all_cost += add * jyz.pi;
                        }
                    }else{
                       {
                            float to_next_jyz_dis=jyzs[cheaper].di-walked;
                            float add=to_next_jyz_dis/d2;
                            cur_qiyou+=add;
                            all_cost+=add*jyzs[cheaper].pi;
                        }
                    }
                }
            }else{
                goto no;
            }
            jyz_i++;
        }


        return;

        {
            no:
            printf("No Solution\n");
        }
//        printf("%d\n",fz_cnt);
    }
};
int main(){
//    int a,b,c;
    float a,b,c,d;
    int e;
    while(std::cin>>a>>b>>c>>d>>e){
            Sol().handle(a,b,c,d,e);

    }

    return 0;
}